package org.csu.pet_store_2.persistence;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.csu.pet_store_2.Domain.Inventory;
import org.springframework.stereotype.Repository;

@Repository
public interface InventoryMapper extends BaseMapper<Inventory> {

    //判断是否存在指定id的inventory（itemid不区分大小写）
    default boolean isExistInventory(String itemid) {
        QueryWrapper<Inventory> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("itemid", itemid);
        return this.exists(queryWrapper);
    }

    //返回指定id的Inventory
    default Inventory getInventoryByItemid(String itemid) {
        return this.selectById(itemid);
    }

    //返回指定id的item的库存
    default int getInventoryValueByItemid(String itemid) {
        Inventory inventory = this.getInventoryByItemid(itemid);
        if (inventory != null) {
            return inventory.getQuantity();
        }
        return 0;
    }

    //插入一个新category，返回实际操作的行数。inventory不为null且itemid必须不在数据库中存在，否则不进行任何修改
    //另外，应当确保itemid已经在数据库的item表中存在（虽然说不存在也不会报错···）
    default int setNewInventory(Inventory inventory) {
        if (inventory == null) {
            return 0;
        }
        QueryWrapper<Inventory> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("itemid", inventory.getItemid());
        if (!this.exists(queryWrapper)) {
            return this.insert(inventory);
        }
        return 0;
    }

    //修改指定id的item的库存数量，返回实际修改的行数。要求itemid已经存在，否则不进行任何修改。
    default int setQuantityByItemid(String itemid, int quantity) {
        Inventory inventory = this.selectById(itemid);
        if (inventory != null) {
            inventory.setQuantity(quantity);
            return this.updateById(inventory);
        }
        return 0;
    }

    //删除指定id的Inventory，返回实际修改的行数
    default int removeInventoryByItemid(String itemid) {
        return this.deleteById(itemid);
    }

}
